package com.zhijian.medical.service;

import com.zhijian.medical.entity.po.LocationInsertVo;
import com.zhijian.medical.entity.po.LocationUpdateVo;
import com.zhijian.medical.entity.po.PhLocation;
import com.zhijian.medical.entity.vo.response.LocationVo;

import java.util.List;

/**
 * @author HCG
 * @version 1.0
 * @date 2021/7/21
 */
public interface LocationService {

    /**
     * 列表，返回LocationVo
     *
     * @param parentId 父id，可为null，null的时候查询全部
     * @return
     */
    List<LocationVo> selectListByParentId(Long parentId);

    /**
     * 树形查询
     *
     * @param all 全部的数据
     * @param pid 父id
     * @return
     */
    List<LocationVo> selectTreeList(List<LocationVo> all, Long pid);

    /**
     * 树形查询
     *
     * @param all              全部的数据
     * @param pid              父id
     * @param isContainsCamera 是否包含相机
     * @return
     */
    List<LocationVo> selectTreeList(List<LocationVo> all, Long pid, boolean isContainsCamera);

    /**
     * 最后渲染的树形数据
     *
     * @return
     */
    List<LocationVo> renderTreeList();

    /**
     * 最后渲染的树形数据
     *
     * @return
     */
    List<LocationVo> renderTreeList(boolean isContainsCamera);

    /**
     * 保存数据
     *
     * @param locationInsertVo
     * @return
     */
    boolean insert(LocationInsertVo locationInsertVo);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    boolean deleteById(Long id);

    /**
     * 修改
     *
     * @param locationUpdateVo
     * @return
     */
    boolean updateName(LocationUpdateVo locationUpdateVo);

    /**
     * 根据一个父id，拼出所有的子级id，加自己
     *
     * @param ids
     * @param parentId
     * @return
     */
    List<Long> concatIdsByParentId(List<Long> ids, Long parentId);

    /**
     * 根据一个父id，拼出所有的子级id，加自己
     *
     * @param parentId
     * @return
     */
    List<Long> concatIdsByParentId(Long parentId);

    /**
     * 根据设备唯一码来找设备位置
     *
     * @param msSn
     * @return
     */
    String selectNameByDeviceMsSn(String msSn);

    /**
     * 根据设备唯一码来找设备位置ID
     *
     * @param msSn
     * @return
     */
    Long selectLocationIdByDeviceMsSn(String msSn);

    /**
     * 根据一个id拼出，他的完整名字，比如301房间的id数据，最后要返回28栋1楼301房间
     *
     * @param id
     * @return
     */
    StringBuilder concatNameByDeepId(Long id);

    /**
     * 根据一个id拼出，他的完整名字，比如301房间的id数据，最后要返回28栋1楼301房间
     *
     * @param sourceName
     * @param parentId
     * @return
     */
    StringBuilder concatNameByDeepId(StringBuilder sourceName, Long parentId);

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    PhLocation selectById(Long id);

    /**
     * 新增
     *
     * @param phLocation
     * @return
     */
    Long insert(PhLocation phLocation);

    /**
     * 更改
     *
     * @param phLocation
     * @return
     */
    boolean update(PhLocation phLocation);

    /**
     * 搜摄像机所在的位置集合
     *
     * @param cameraType
     * @return
     */
    List<LocationVo> selectListByCameraType(Byte cameraType);

}
